/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.geradormvc.persistencia.impl;

import br.com.geradormvc.excessao.GeradorMVCException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author douglas
 */
public class GerenciadorDeConexao {
   /*
    * select  datname from pg_catalog.pg_database
    */

    private static String driver;
    private static String url;
    private static String usuario;
    private static String senha;

    private static void init () throws GeradorMVCException {
        try {
            Class.forName(ParametrosDB.getDriver());
            url = ParametrosDB.getUrl();
            usuario = ParametrosDB.getUser();
            senha = ParametrosDB.getPassword();
        } catch (ClassNotFoundException exc) {
            StringBuffer mensagem = new StringBuffer("Não foi possível conectar com o banco de dados.");
            mensagem.append("\nMotivo: " +  exc.getMessage());
            throw new GeradorMVCException(mensagem.toString());
        }
    }
    static Connection getConexao() throws GeradorMVCException {
        try {
            init();
            return DriverManager.getConnection(url, usuario, senha);
        } catch (SQLException exc) {
            StringBuffer mensagem = new StringBuffer("Não foi possível estabelecer conexão com o banco de dados.");
            mensagem.append("\nMotivo: " +  exc.getMessage());
            throw new GeradorMVCException(mensagem.toString());
        }
    }

    static void closeConexao(Connection con) throws GeradorMVCException {
        closeConexao(con, null, null);
    }

    static void closeConexao(Connection con, PreparedStatement stmt) throws GeradorMVCException {
        closeConexao(con, stmt, null);
    }

    static void closeConexao(Connection con, PreparedStatement stmt, ResultSet rs) throws GeradorMVCException {
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException exc) {
            StringBuffer mensagem = new StringBuffer("Não foi possível finalizar a conexão com o banco de dados.");
            mensagem.append("\nMotivo: " +  exc.getMessage());
            throw new GeradorMVCException(mensagem.toString());
        }
    }


}
